package com.payment.system.mapper;

import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.payment.common.annotation.DataSource;
import com.payment.common.enums.DataSourceType;
import com.payment.system.domain.Merchant;
import com.payment.system.vo.LoginVo;
import com.payment.system.vo.MerchantParentVo;
import com.payment.system.vo.MerchantVo;
import com.payment.system.vo.MyTeamVo;

/**
 * 商户 数据层
 * 
 * @author payment
 * @date 2018-12-27
 */
public interface MerchantMapper {
	/**
	 * 查询商户信息
	 * 
	 * @param id
	 *            商户id
	 * @return 商户信息
	 */
	@DataSource(DataSourceType.SLAVE)
	public Merchant selectMerchantById(String id);

	/**
	 * 查询商户信息
	 * 
	 * @param phone
	 *            商户手机号
	 * @return 商户信息
	 */
	@DataSource(DataSourceType.SLAVE)
	public Merchant selectByPhone(String phone);

	/**
	 * 查询商户列表
	 * 
	 * @param merchant
	 *            商户信息
	 * @return 商户集合
	 */
	@DataSource(DataSourceType.SLAVE)
	public List<Merchant> selectMerchantList(Merchant merchant);

	/**
	 * 新增商户
	 * 
	 * @param merchant
	 *            商户信息
	 * @return 结果
	 */
	public int insertMerchant(Merchant merchant);

	/**
	 * 修改商户
	 * 
	 * @param merchant
	 *            商户信息
	 * @return 结果
	 */
	public int updateMerchant(Merchant merchant);

	/**
	 * 删除商户
	 * 
	 * @param id
	 *            商户ID
	 * @return 结果
	 */
	public int deleteMerchantById(String id);

	/**
	 * 批量删除商户
	 * 
	 * @param ids
	 *            需要删除的数据ID
	 * @return 结果
	 */
	public int deleteMerchantByIds(String[] ids);

	/**
	 * //启用或禁用商户
	 * 
	 * @param id
	 * @return
	 */
	int updateUseStatusById(@Param("id") String id, @Param("status") String status);

	/**
	 * 通过登录手机号 查询商户
	 * 
	 * @param loginName
	 * @return
	 */
	@DataSource(DataSourceType.SLAVE)
	Merchant selectMerchantByPhone(@Param("loginName") String loginName);

	/**
	 * 用户登陆 账号，密码
	 * 
	 * @param loginName
	 * @param password
	 * @return
	 */
	LoginVo selectMerchantByPhoneAndPwd(@Param("loginName") String loginName, @Param("password") String password);

	/**
	 * 修改密码
	 * 
	 * @param phone
	 *            手机号
	 * @param password
	 *            密码
	 * @return
	 */
	int updateMerchantByPhone(@Param("phone") String phone, @Param("password") String password);

	/**
	 * 修改密码
	 * 
	 * @param merchantId
	 *            id
	 * @param password
	 *            密码
	 * @return
	 */
	int updatePasswordByMerchantId(@Param("merchantId") String merchantId, @Param("password") String password);

	/**
	 * 修改支付密码
	 * 
	 * @param merchantId
	 * @param password
	 * @return
	 */
	int updatePayPassword(@Param("merchantId") String merchantId, @Param("password") String password);

	/**
	 * app获取直推客户信息
	 * 
	 * @param merchantPhone
	 *            手机号
	 * @param pageNum
	 *            页数
	 * @param pageSize
	 *            每页条数
	 * @return
	 */
	@DataSource(DataSourceType.SLAVE)
	List<MerchantVo> selectDirectCustomerList(@Param("merchantPhone") String merchantPhone,
			@Param("num") Integer pageNum, @Param("size") Integer pageSize);

	// 获取直推的总人数 根据用户级别
	Integer selectCustomerCount(@Param("merchantPhone") String merchantPhone, @Param("level") Integer level);

	// 自动补全商户名称
	@DataSource(DataSourceType.SLAVE)
	List<String> selectNameByAutosearch(@Param("name") String name);

	// 根据商户编号查询用户
	@DataSource(DataSourceType.SLAVE)
	Merchant selectMerchantByMerchantNo(@Param("merchantNo") String merchantNo);

	/**
	 * 根据等级获取用户列表
	 * 
	 * @param level
	 * @return
	 */
	@DataSource(DataSourceType.SLAVE)
	public List<Merchant> selectAllMerchantListByLevel(@Param("level") Integer level);

	@DataSource(DataSourceType.SLAVE)
	public List<Merchant> selectAllMerchantListByCreateTime(@Param("time") String time1);

	/**
	 * 根据手机号和等级获取直推人数
	 * 
	 * @param phone
	 * @param level
	 * @return
	 */
	@DataSource(DataSourceType.SLAVE)
	public int selectZTcountByLevel(@Param("phone") String phone, @Param("level") Integer level);

	@DataSource(DataSourceType.SLAVE)
	public List<Merchant> selectByParentPhone(@Param("phone") String phone);

	@DataSource(DataSourceType.SLAVE)
	public List<Merchant> selectAllMerchantListByLevelAndCardNumber(@Param("level") String level);

	// 测试数据
	List<Merchant> selectAllMerchantListByTest(@Param("num") Integer pageNum, @Param("size") Integer pageSize);

	// 修改用户等级
	int updateMerchantLevelById(@Param("merchantId") String merchantId, @Param("level") int level);

	/**
	 * 我的团队列表
	 * 
	 * @param phone
	 *            手机号
	 * @param pageNum
	 *            页数
	 * @param pageSize
	 *            每页条数
	 * @return
	 */
	@DataSource(DataSourceType.SLAVE)
	List<MyTeamVo> selectMerchantListByCustomer(@Param("phone") String phone, @Param("num") Integer pageNum,
			@Param("size") Integer pageSize);

	/**
	 * 根据手机号查询团队数据
	 * 
	 * @param phone
	 * @return
	 */
	@DataSource(DataSourceType.SLAVE)
	public List<MerchantParentVo> selectAllTeamByParentphone(String phone);
	/**
	 * 根据收号查询新增和新变动团队数据
	 * @param phone
	 * @param endTime 
	 * @param time 
	 * @return
	 */
	public List<MerchantParentVo> selectNewTeamByParentphone(@Param("phone")String phone, @Param("time")String time,@Param("endTime") String endTime);
	/**
	 * 客户关系 推荐数量
	 * 
	 * @param phone
	 * @return
	 */
	@DataSource(DataSourceType.SLAVE)
	public List<Map<String, Object>> selectLevelsCount(String phone);

	/**
	 * 根据身份证号查询是否已存在
	 * 
	 * @param cardNumber
	 * @return
	 */
	@DataSource(DataSourceType.SLAVE)
	int selectCountByCardNumber(@Param("cardNumber") String cardNumber);


	/**
	 *新增人数:推荐人手机和当前日期查询
	 */
	@DataSource(DataSourceType.SLAVE)
    Integer selectAllTeamByParentphoneAndCreateDate(@Param("parentphone")String parentphone,@Param("dateNow") String dateNow);

	/**
	 *团队人数:根据月份
	 */
	@DataSource(DataSourceType.SLAVE)
    Integer selectAllTeamByParentphoneAndCreateDateMonth(@Param("parentphone")String parentphone,@Param("dateNow") String dateNow);

	/**
	 *根据手机号查询Vip列表
	 */
	@DataSource(DataSourceType.SLAVE)
	List<MyTeamVo> selectMerchantListByCustomerAndVip(@Param("phone") String phone, @Param("num") Integer pageNum,@Param("size") Integer pageSize);

	/**
	 *根据手机号查询合伙人列表
	 */
	@DataSource(DataSourceType.SLAVE)
	List<MyTeamVo> selectMerchantListByCustomerAndPartner(@Param("phone") String phone, @Param("num") Integer pageNum,@Param("size") Integer pageSize);

	/**
	 * 根据手机号查询新注册列表
	 */
	@DataSource(DataSourceType.SLAVE)
	List<MyTeamVo> selectMerchantListByCustomerAndRegister(@Param("phone") String phone, @Param("num") Integer pageNum,@Param("size") Integer pageSize,@Param("dateTime")String dateTime);
	/**
	 * 修改上级手机号 根据手机号
	 * @param parentphone
	 * @param phone
	 * @return
	 */
	public int updateParentPhoneByPhone(@Param("parentphone")String parentphone,@Param("phone") String phone);


	/**
	 * 根据上游商户ID查询用户信息
	 *
	 * @param acqMerchantNo 上游商户ID
	 * @return
	 */
	Merchant selectMerchantByAcqMerchantNo(String acqMerchantNo);
}